//
// Created by wujehy on 2020/8/3.
//

#ifndef AUTH_RAFT_BASETYPE_H
#define AUTH_RAFT_BASETYPE_H

// 网络封装层
class NetWorkWarpper;

/**
 * @brief 管理模块基类
 */
class ManagerBase
{
public:
    /**
     * @brief 管理模块的类型
     */
    enum Type
    {
        ManagerType_Business = 1, ///< 业务模块 类型
        ManagerType_Listerner, ///< 监听器模块
        ManagerType_Context, ///< 上下文管理模块
        ManagerType_Dao, ///< 数据访问层模块
    };

    /**
     * @brief 返回 模块的类型 的接口
     * @return 当前 管理器的 类型
     */
    virtual Type type() = 0;

    /**
     * @brief 初始化 入口
     */
    virtual void init() = 0;

    /**
     * @brief 析钩器
     */
    virtual ~ManagerBase()
    {

    }

    /**
     * @brief 初始化 完成后统一 触发 的触发器
     */
    virtual void init_finished() = 0;
};

//class ManagerFactory; ///< TODO  ??? 暂时用不到



/**
 * @brief 业务管理器
 */
class BusinessManager;

/**
 * @brief 具体业务的 基类
 * @tparam T  上下文泛型类型
 */
template<class T>
class BusinessBase;

/**
 * @brief 监听器管理器
 */
class ListernerManager;

/**
 * @brief 监听子模块基类
 */
class ListernerBase;

/**
 * @brief 上下文管理器
 */
class ContextManager;

/**
 * @brief 上下文基类
 */
class ContextBase;

/**
 * @brief 数据访问层管理器
 */
class DaoManager;

/**
 * @brief 数据库表级/模块级 基类
 * @tparam T 用户数据类型
 * @tparam DBHander 主数据库指针类型
 */
template<class T, class DBHander>
class DaoBase;

// 日志信息

// 网络包类型
namespace GeeJoan
{
    namespace Protocol
    {
        namespace NetWork
        {
            /**
             * @brief 接受到的网络包类型
             */
            class NetWorkPackageRequest;
        }
    }
}
#endif //AUTH_RAFT_BASETYPE_H
